# This file is part of MiniDLNA.
#
# MiniDLNA is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as
# published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
#
# MiniDLNA is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
# License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with MiniDLNA; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
# USA.
AC_INIT(MiniDLNA,1.3.0,,minidlna)
#LT_INIT

AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE([subdir-objects])
AC_CONFIG_HEADERS([config.h])
AM_SILENT_RULES([yes])

m4_ifdef([AC_USE_SYSTEM_EXTENSIONS], [AC_USE_SYSTEM_EXTENSIONS])

#MiniDLNA

AM_ICONV
AM_GNU_GETTEXT([external])
AM_GNU_GETTEXT_VERSION(0.20)

# Checks for programs.
AC_PROG_AWK
AC_PROG_CC
AM_PROG_CC_C_O
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET

# Default string definitions
AC_DEFINE_UNQUOTED([OS_URL],"https://github.com/OpenVisionE2/minidlna",[OS URL])
AC_DEFINE_UNQUOTED([ROOTDEV_MANUFACTURER],"Justin Maggard", [Manufacturer])
AC_DEFINE_UNQUOTED([ROOTDEV_MANUFACTURERURL],"http://www.netgear.com/", [Manufacturer URL])
AC_DEFINE_UNQUOTED([ROOTDEV_MODELNAME],"Windows Media Connect compatible (MiniDLNA)", [Model name])
AC_DEFINE_UNQUOTED([ROOTDEV_MODELDESCRIPTION],"MiniDLNA on " OS_NAME, [Model description])
AC_DEFINE_UNQUOTED([ROOTDEV_MODELURL],OS_URL,[Model URL])


################################################################################################################
# Checks for typedefs, structures, and compiler characteristics.
AC_C_INLINE
AC_TYPE_MODE_T
AC_TYPE_OFF_T
AC_TYPE_PID_T
AC_TYPE_SIZE_T
m4_ifdef([AC_TYPE_UINT8_T], [AC_TYPE_UINT8_T])
m4_ifdef([AC_TYPE_INT32_T], [AC_TYPE_INT32_T])
m4_ifdef([AC_TYPE_UINT32_T], [AC_TYPE_UINT32_T])
m4_ifdef([AC_TYPE_UINT64_T], [AC_TYPE_UINT64_T])
m4_ifdef([AC_TYPE_SSIZE_T], [AC_TYPE_SSIZE_T])
AC_STRUCT_DIRENT_D_TYPE
AC_STRUCT_ST_BLOCKS
AC_HEADER_STDBOOL
AC_C_BIGENDIAN

# Checks for library functions.
AC_FUNC_FORK
AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
AC_CHECK_FUNCS([gethostname getifaddrs gettimeofday inet_ntoa memmove memset mkdir realpath select sendfile setlocale socket strcasecmp strchr strdup strerror strncasecmp strpbrk strrchr strstr strtol strtoul])
AC_CHECK_DECLS([SEEK_HOLE])
AC_SEARCH_LIBS([clock_gettime], [rt], [AC_DEFINE([HAVE_CLOCK_GETTIME], [1], [use clock_gettime])],)

#
# Check for struct ip_mreqn
#
AC_MSG_CHECKING(for struct ip_mreqn)
AC_TRY_COMPILE([#include <netinet/in.h>], [
    struct ip_mreqn mreq;
    mreq.imr_address.s_addr = 0;
], [
    # Yes, we have it...
    AC_MSG_RESULT(yes)
    AC_DEFINE([HAVE_STRUCT_IP_MREQN],[],[Support for struct ip_mreqn])
], [
    # We'll just have to try and use struct ip_mreq
    AC_MSG_RESULT(no)
    AC_MSG_CHECKING(for struct ip_mreq)
    AC_TRY_COMPILE([#include <netinet/in.h>], [
        struct ip_mreq mreq;
        mreq.imr_interface.s_addr = 0;
    ], [
        # Yes, we have it...
        AC_MSG_RESULT(yes)
        AC_DEFINE([HAVE_STRUCT_IP_MREQ],[],[Support for struct ip_mreq])
    ], [
        # No multicast support
        AC_MSG_ERROR([No multicast support])
    ])
])

################################################################################################################
# Special include directories
case $host in
    *-*-darwin*)
        DARWIN_OS=1
        SEARCH_DIR="/opt/local"
        INCLUDE_DIR="$SEARCH_DIR/include"
        ;;
    *-*-solaris*)
        AC_DEFINE([SOLARIS], [1], [we are on solaris])
        ;;
    *-*-cygwin*)
        CYGWIN_OS=1
        ;;
    *-*-freebsd*)
        FREEBSD_OS=1
        ;;
    *-*-openbsd*)
        OPENBSD_OS=1
        ;;
    *-*-linux*)
        if test -f /etc/redhat-release; then
            INCLUDE_DIR="/usr/include/ffmpeg"
        fi
        ;;
esac

AC_CHECK_HEADERS(syscall.h sys/syscall.h mach/mach_time.h)

AC_MSG_CHECKING([for clock_gettime])
AC_SEARCH_LIBS([clock_gettime], [rt], [AC_DEFINE([HAVE_CLOCK_GETTIME], [1], [use clock_gettime])],)

AC_MSG_CHECKING([for __NR_clock_gettime syscall])
AC_COMPILE_IFELSE(
    [AC_LANG_PROGRAM(
        [
            #include <asm/unistd.h>
        ],
        [
            #ifndef __NR_clock_gettime
            #error
            #endif
        ]
    )],
    [
        AC_MSG_RESULT([yes])
        AC_DEFINE([HAVE_CLOCK_GETTIME_SYSCALL], [1], [Whether the __NR_clock_gettime syscall is defined])
    ],
    [
        AC_MSG_RESULT([no])
    ])

AC_CHECK_HEADER(linux/netlink.h,
    [AC_DEFINE([HAVE_NETLINK],[1],[Support for Linux netlink])], [], [#include <sys/socket.h>])

################################################################################################################
### Library checks

CPPFLAGS_SAVE="$CPPFLAGS"
for dir in "" /usr/local $INCLUDE_DIR; do
    if test -n "$dir"; then
        CPPFLAGS="$CPPFLAGS_SAVE -I$dir"
    fi
    AC_CHECK_HEADERS([libavutil/avutil.h ffmpeg/libavutil/avutil.h libav/libavutil/avutil.h avutil.h ffmpeg/avutil.h libav/avutil.h], [HAVE_LIBAVUTIL=1])
    if test -z "$HAVE_LIBAVUTIL"; then
        unset ac_cv_header_avutil_h
        unset ac_cv_header_libavutil_avutil_h
        unset ac_cv_header_ffmpeg_avutil_h
        unset ac_cv_header_ffmpeg_libavutil_avutil_h
        unset ac_cv_header_libav_avutil_h
        unset ac_cv_header_libav_libavutil_avutil_h
        continue
    fi
    break
done
if test -z "$HAVE_LIBAVUTIL"; then
    AC_MSG_ERROR([libavutil headers not found or not usable])
fi

CPPFLAGS_SAVE="$CPPFLAGS"
for dir in "" /usr/local $INCLUDE_DIR; do
    if test -n "$dir"; then
        CPPFLAGS="$CPPFLAGS_SAVE -I$dir"
    fi
    AC_CHECK_HEADERS([libavcodec/avcodec.h ffmpeg/libavcodec/avcodec.h libav/libavcodec/avcodec.h avcodec.h ffmpeg/avcodec.h libav/avcodec.h], [HAVE_LIBAVCODEC=1])
    if test -z "$HAVE_LIBAVCODEC"; then
        unset ac_cv_header_avcodec_h
        unset ac_cv_header_libavcodec_avcodec_h
        unset ac_cv_header_ffmpeg_avcodec_h
        unset ac_cv_header_ffmpeg_libavcodec_avcodec_h
        unset ac_cv_header_libav_avcodec_h
        unset ac_cv_header_libav_libavcodec_avcodec_h
        continue
    fi
    break
done
if test -z "$HAVE_LIBAVCODEC"; then
    AC_MSG_ERROR([libavcodec headers not found or not usable])
fi

CPPFLAGS_SAVE="$CPPFLAGS"
for dir in "" /usr/local $INCLUDE_DIR; do
    if test -n "$dir"; then
        CPPFLAGS="$CPPFLAGS_SAVE -I$dir"
    fi
    AC_CHECK_HEADERS([libavformat/avformat.h ffmpeg/libavformat/avformat.h libav/libavformat/avformat.h avformat.h ffmpeg/avformat.h libav/avformat.h], [HAVE_LIBAVFORMAT=1])
    if test -z "$HAVE_LIBAVFORMAT"; then
        unset ac_cv_header_avformat_h
        unset ac_cv_header_libavformat_avformat_h
        unset ac_cv_header_ffmpeg_avformat_h
        unset ac_cv_header_ffmpeg_libavformat_avformat_h
        unset ac_cv_header_libav_avformat_h
        unset ac_cv_header_libav_libavformat_avformat_h
        continue
    fi
    break
done
if test -z "$HAVE_LIBAVFORMAT"; then
    AC_MSG_ERROR([libavformat headers not found or not usable])
fi

CPPFLAGS_SAVE="$CPPFLAGS"
for dir in "" /usr/local $INCLUDE_DIR; do
    if test -n "$dir"; then
        CPPFLAGS="$CPPFLAGS -I$dir"
    fi
    AC_CHECK_HEADERS([jpeglib.h sqlite3.h libexif/exif-loader.h id3tag.h ogg/ogg.h vorbis/codec.h FLAC/metadata.h],,[unset $as_ac_Header; break],)
    if test x"$ac_cv_header_jpeglib_h" != x"yes"; then
        CPPFLAGS="$CPPFLAGS_SAVE"
        continue
    elif test x"$ac_cv_header_sqlite3_h" != x"yes"; then
        CPPFLAGS="$CPPFLAGS_SAVE"
        continue
    elif test x"$ac_cv_header_libexif_exif_loader_h" != x"yes"; then
        CPPFLAGS="$CPPFLAGS_SAVE"
        continue
    elif test x"$ac_cv_header_id3tag_h" != x"yes"; then
        CPPFLAGS="$CPPFLAGS_SAVE"
        continue
    elif test x"$ac_cv_header_ogg_ogg_h" != x"yes"; then
        CPPFLAGS="$CPPFLAGS_SAVE"
        continue
    elif test x"$ac_cv_header_vorbis_codec_h" != x"yes"; then
        CPPFLAGS="$CPPFLAGS_SAVE"
        continue
    elif test x"$ac_cv_header_FLAC_metadata_h" != x"yes"; then
        CPPFLAGS="$CPPFLAGS_SAVE"
        continue
    else
        break;
    fi
done
test x"$ac_cv_header_jpeglib_h" != x"yes" && AC_MSG_ERROR([libjpeg headers not found or not usable])
test x"$ac_cv_header_sqlite3_h" != x"yes" && AC_MSG_ERROR([libsqlite3 headers not found or not usable])
test x"$ac_cv_header_libexif_exif_loader_h" != x"yes" && AC_MSG_ERROR([libexif headers not found or not usable])
test x"$ac_cv_header_id3tag_h" != x"yes" && AC_MSG_ERROR([libid3tag headers not found or not usable])
test x"$ac_cv_header_ogg_ogg_h" != x"yes" && AC_MSG_ERROR([libogg headers not found or not usable])
test x"$ac_cv_header_vorbis_codec_h" != x"yes" && AC_MSG_ERROR([libvorbis headers not found or not usable])
test x"$ac_cv_header_FLAC_metadata_h" != x"yes" && AC_MSG_ERROR([libFLAC headers not found or not usable])

CFLAGS_SAVE="$CFLAGS"
CFLAGS="$CFLAGS -Wall -Werror"
AC_MSG_CHECKING([if we should use the daemon() libc function])
AC_COMPILE_IFELSE(
     [AC_LANG_PROGRAM(
         [
             #include <stdlib.h>
             #include <unistd.h>
         ],
         [
            return daemon(0, 0);
         ]
     )],
     [
         AC_DEFINE([USE_DAEMON], [1], 
                   [use the system's builtin daemon()])
         AC_MSG_RESULT([yes])
     ],
     [
         AC_MSG_RESULT([no])
     ])

AC_MSG_CHECKING([if scandir declaration requires const char cast])
AC_COMPILE_IFELSE(
     [AC_LANG_PROGRAM(
         [
             #include <stdlib.h>
             #include <sys/types.h>
             #include <dirent.h>
         ],
         [
            int filter(struct dirent *d);
            struct dirent **ptr = NULL;
            char *name = NULL;
            (void)scandir(name, &ptr, filter, alphasort);
         ]
     )],
     [
         AC_MSG_RESULT([no])
     ],
     [
         AC_DEFINE([SCANDIR_CONST], [1], 
                   [scandir needs const char cast])

         AC_MSG_RESULT([yes])
     ])

AC_MSG_CHECKING([for linux sendfile support])
AC_COMPILE_IFELSE(
     [AC_LANG_PROGRAM(
         [
             #include <sys/types.h>
             #include <sys/sendfile.h>
         ],
         [
             int tofd = 0, fromfd = 0;
             off_t offset;
             size_t total = 0;
             ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
             return nwritten;
         ]
     )],
     [
         AC_MSG_RESULT([yes])
         AC_DEFINE([HAVE_LINUX_SENDFILE_API], [1], [Whether linux sendfile() API is available])
     ],
     [
         AC_MSG_RESULT([no])
     ])

AC_MSG_CHECKING([for darwin sendfile support])
AC_COMPILE_IFELSE(
     [AC_LANG_PROGRAM(
         [
             #include <stdlib.h>
             #include <sys/types.h>
             #include <sys/socket.h>
             #include <sys/uio.h>
         ],
         [
             int fd = 0, s = 0;
             off_t offset = 0, len;
             struct sf_hdtr *hdtr = NULL;
             int flags = 0;
             int ret;
             ret = sendfile(fd, s, offset, &len, hdtr, flags);
             return ret;
         ]
     )],
     [
         AC_MSG_RESULT([yes])
         AC_DEFINE([HAVE_DARWIN_SENDFILE_API], [1], [Whether darwin sendfile() API is available])
     ],
     [
         AC_MSG_RESULT([no])
     ])

AC_MSG_CHECKING([for freebsd sendfile support])
AC_COMPILE_IFELSE(
     [AC_LANG_PROGRAM(
         [
             #include <stdlib.h>
             #include <sys/types.h>
             #include <sys/socket.h>
             #include <sys/uio.h>
         ],
         [
             int fromfd=0, tofd=0, ret, total=0;
             off_t offset=0, nwritten;
             struct sf_hdtr hdr;
             struct iovec hdtrl;
             hdr.headers = &hdtrl;
             hdr.hdr_cnt = 1;
             hdr.trailers = NULL;
             hdr.trl_cnt = 0;
             hdtrl.iov_base = NULL;
             hdtrl.iov_len = 0;
             ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
         ]
     )],
     [
         AC_MSG_RESULT([yes])
         AC_DEFINE([HAVE_FREEBSD_SENDFILE_API], [1], [Whether freebsd sendfile() API is available])
     ],
     [
         AC_MSG_RESULT([no])
     ])
CFLAGS="$CFLAGS_SAVE"

LDFLAGS_SAVE="$LDFLAGS"
for dir in "" /usr/local $SEARCH_DIR; do
    if test -n "$dir"; then
        LDFLAGS="$LDFLAGS -L$dir/lib"
    fi
    AC_CHECK_LIB([jpeg], [jpeg_set_defaults], [LIBJPEG_LIBS="-ljpeg"], [unset ac_cv_lib_jpeg_jpeg_set_defaults; LDFLAGS="$LDFLAGS_SAVE"; continue])
    break
done
test x"$ac_cv_lib_jpeg_jpeg_set_defaults" = x"yes" || AC_MSG_ERROR([Could not find libjpeg])
AC_SUBST(LIBJPEG_LIBS)

LDFLAGS_SAVE="$LDFLAGS"
for dir in "" /usr/local $SEARCH_DIR; do
    if test -n "$dir"; then
        LDFLAGS="$LDFLAGS -L$dir/lib"
    fi
    AC_CHECK_LIB([exif], [exif_data_new_from_file], [LIBEXIF_LIBS="-lexif"], [unset ac_cv_lib_exif_exif_data_new_from_file; LDFLAGS="$LDFLAGS_SAVE"; continue])
    break
done
test x"$ac_cv_lib_jpeg_jpeg_set_defaults" = x"yes" || AC_MSG_ERROR([Could not find libexif])
AC_SUBST(LIBEXIF_LIBS)

LDFLAGS_SAVE="$LDFLAGS"
for dir in "" /usr/local $SEARCH_DIR; do
    if test -n "$dir"; then
        LDFLAGS="$LDFLAGS -L$dir/lib"
    fi
    AC_CHECK_LIB([id3tag -lz], [id3_file_open], [LIBID3TAG_LIBS="-lid3tag -lz"], [unset ac_cv_lib_id3tag_id3_file_open; LDFLAGS="$LDFLAGS_SAVE"; continue])
    break
done
AC_SUBST(LIBID3TAG_LIBS)

LDFLAGS_SAVE="$LDFLAGS"
for dir in "" /usr/local $SEARCH_DIR; do
    if test -n "$dir"; then
        LDFLAGS="$LDFLAGS -L$dir/lib"
    fi
    AC_CHECK_LIB(sqlite3, sqlite3_open, [LIBSQLITE3_LIBS="-lsqlite3"], [unset ac_cv_lib_sqlite3_sqlite3_open; LDFLAGS="$LDFLAGS_SAVE"; continue])
    AC_CHECK_LIB(sqlite3, sqlite3_malloc, [AC_DEFINE([HAVE_SQLITE3_MALLOC], [1], [Define to 1 if the sqlite3_malloc function exists.])])
    AC_CHECK_LIB(sqlite3, sqlite3_prepare_v2, [AC_DEFINE([HAVE_SQLITE3_PREPARE_V2], [1], [Define to 1 if the sqlite3_prepare_v2 function exists.])])
    break
done
test x"$ac_cv_lib_sqlite3_sqlite3_open" = x"yes" || AC_MSG_ERROR([Could not find libsqlite3])
AC_SUBST(LIBSQLITE3_LIBS)

LDFLAGS_SAVE="$LDFLAGS"
for dir in "" /usr/local $SEARCH_DIR; do
    if test -n "$dir"; then
        LDFLAGS="$LDFLAGS -L$dir/lib"
    fi
    AC_CHECK_LIB([avformat -lavcodec -lavutil -lz], [avformat_open_input], [LIBAVFORMAT_LIBS="-lavformat -lavcodec -lavutil -lz"],
		 [AC_CHECK_LIB([avformat -lavcodec -lavutil -lz], [av_open_input_file], [LIBAVFORMAT_LIBS="-lavformat -lavcodec -lavutil -lz"],
		  [unset ac_cv_lib_avformat_av_open_input_file; unset ac_cv_lib_avformat_avformat_open_input; LDFLAGS="$LDFLAGS_SAVE"; continue])])
    break
done
AC_SUBST(LIBAVFORMAT_LIBS)

AC_CHECK_LIB(pthread, pthread_create)

# test if we have vorbisfile
# prior versions had ov_open_callbacks in libvorbis, test that, too.
AC_CHECK_LIB(vorbisfile, ov_open_callbacks,
        [AC_CHECK_HEADERS([vorbis/vorbisfile.h],
         AM_CONDITIONAL(HAVE_VORBISFILE, true)
         AC_DEFINE(HAVE_VORBISFILE,1,[Have vorbisfile]),
         AM_CONDITIONAL(HAVE_VORBISFILE, false))],
         AM_CONDITIONAL(HAVE_VORBISFILE, false),
         -lvorbis -logg)
AC_CHECK_LIB(FLAC, FLAC__stream_decoder_init_stream,
        [AC_CHECK_HEADERS([FLAC/all.h],
         AM_CONDITIONAL(HAVE_FLAC, true)
         AC_DEFINE(HAVE_FLAC,1,[Have flac]),
         AM_CONDITIONAL(HAVE_FLAC, false))],
         AM_CONDITIONAL(HAVE_FLAC, false),
        -logg)
# test without -logg to see whether we really need it (libflac can be without)
AC_CHECK_LIB(FLAC, FLAC__stream_decoder_init_ogg_stream,
         AM_CONDITIONAL(HAVE_FLAC, true)
         AC_DEFINE(HAVE_FLAC,1,[Have flac])
         AM_CONDITIONAL(NEED_OGG, false),
        [AM_CONDITIONAL(NEED_OGG, true)])
AC_CHECK_LIB(vorbisfile, vorbis_comment_query,
        AM_CONDITIONAL(NEED_VORBIS, false),
        AM_CONDITIONAL(NEED_VORBIS, true),
        -logg)

AC_CHECK_LIB(avahi-client, avahi_threaded_poll_new,
        [AC_CHECK_HEADERS([avahi-common/thread-watch.h],
         AM_CONDITIONAL(HAVE_AVAHI, true)
         AC_DEFINE(HAVE_AVAHI,1,[Have avahi]),
         AM_CONDITIONAL(HAVE_AVAHI, false))],
         AM_CONDITIONAL(HAVE_AVAHI, false),
        -lavahi-client -lavahi-common)

################################################################################################################
### Header checks

AC_CHECK_HEADERS([arpa/inet.h asm/unistd.h endian.h machine/endian.h fcntl.h libintl.h locale.h netdb.h netinet/in.h poll.h stddef.h stdlib.h string.h sys/file.h sys/inotify.h sys/ioctl.h sys/param.h sys/queue.h sys/socket.h sys/time.h unistd.h])
test x"$ac_cv_header_poll_h" != x"yes" && AC_MSG_ERROR([poll.h not found or not usable])
test x"$ac_cv_header_sys_queue_h" != x"yes" && AC_MSG_ERROR([sys/queue.h not found or not usable])

AC_CHECK_FUNCS(inotify_init, AC_DEFINE(HAVE_INOTIFY,1,[Whether kernel has inotify support]), [
    AC_MSG_CHECKING([for __NR_inotify_init syscall])
    AC_COMPILE_IFELSE(
         [AC_LANG_PROGRAM(
             [
                 #include <asm/unistd.h>
             ],
             [
                 #ifndef __NR_inotify_init
                 #error
                 #endif
             ]
         )],
         [
             AC_MSG_RESULT([yes])
             AC_DEFINE(HAVE_INOTIFY,1,[Whether kernel has inotify support])
         ],
         [
             AC_MSG_RESULT([no])
         ])
])

AC_CHECK_FUNCS(kqueue, AM_CONDITIONAL(HAVE_KQUEUE, true), AM_CONDITIONAL(HAVE_KQUEUE, false))

################################################################################################################
### Build Options

AC_ARG_WITH(log-path,
	AS_HELP_STRING([--with-log-path=PATH],[Default log path]),
	[with_logpath="$withval"],[with_logpath="/var/log"])
AC_DEFINE_UNQUOTED([DEFAULT_LOG_PATH],"${with_logpath}",[Log path])


AC_ARG_WITH(db-path,
	AS_HELP_STRING([--with-db-path=PATH],[Default DB path]),
	[with_dbpath="$withval"],[with_dbpath="/var/cache/minidlna"])
AC_DEFINE_UNQUOTED([DEFAULT_DB_PATH],"${with_dbpath}",[DB path])

AC_ARG_WITH(os-name,
	AS_HELP_STRING([--with-os-name=NAME],[OS Name]),
	[with_osname="$withval"],[with_osname="$(uname -s)"])
AC_DEFINE_UNQUOTED([OS_NAME],"${with_osname}",[OS Name])

AC_ARG_WITH(os-version,
	AS_HELP_STRING([--with-os-version=VERS],[OS Version]),
	[with_osver="$withval"],[with_osver="$(uname -r)"])
AC_DEFINE_UNQUOTED([OS_VERSION],"${with_osver}",[OS Version])

AC_ARG_WITH(os-url,
	AS_HELP_STRING([--with-os-url=URL],[OS URL]),
	[with_osurl="$withval"],[with_osurl="http://www.netgear.com"])
AC_DEFINE_UNQUOTED([OS_URL],"${with_osurl}",[OS URL])


AC_MSG_CHECKING([whether to enable TiVo support])
AC_ARG_ENABLE(tivo,
	[  --enable-tivo           enable TiVo support],[
	if test "$enableval" = "yes"; then
		AC_DEFINE(TIVO_SUPPORT, 1, [Define to 1 if you want to enable TiVo support])
		AM_CONDITIONAL(TIVO_SUPPORT, true)
		AC_MSG_RESULT([yes])
	else
		AM_CONDITIONAL(TIVO_SUPPORT, false)
		AC_MSG_RESULT([no])
	fi
	],[
		AM_CONDITIONAL(TIVO_SUPPORT, false)
		AC_MSG_RESULT([no])
	]
)

AC_MSG_CHECKING([whether to enable generic NETGEAR device support])
AC_ARG_ENABLE(netgear,
	[  --enable-netgear        enable generic NETGEAR device support],[
	if test "$enableval" = "yes"; then
		AC_DEFINE([NETGEAR],[1],[Define to 1 if you want to enable generic NETGEAR device support])
		AC_DEFINE_UNQUOTED([OS_URL],"http://www.netgear.com/")
		AC_DEFINE_UNQUOTED([ROOTDEV_MANUFACTURERURL],"http://www.netgear.com/")
		AC_DEFINE_UNQUOTED([ROOTDEV_MANUFACTURER],"NETGEAR")
		AC_DEFINE_UNQUOTED([ROOTDEV_MODELNAME],"Windows Media Connect compatible (ReadyDLNA)")
		AC_DEFINE_UNQUOTED([ROOTDEV_MODELDESCRIPTION],"ReadyDLNA")
                AC_MSG_RESULT([yes])
        else
                AC_MSG_RESULT([no])
        fi
        ],[
                AC_MSG_RESULT([no])
        ]
)

AC_MSG_CHECKING([whether to enable NETGEAR ReadyNAS support])
AC_ARG_ENABLE(readynas,
	[  --enable-readynas       enable NETGEAR ReadyNAS support],[
	if test "$enableval" = "yes"; then
		AC_DEFINE([NETGEAR],[1],[Define to 1 if you want to enable generic NETGEAR device support])
		AC_DEFINE([READYNAS],[1],[Define to 1 if you want to enable NETGEAR ReadyNAS support])
		AC_DEFINE([TIVO_SUPPORT], 1, [Define to 1 if you want to enable TiVo support])
		AC_DEFINE_UNQUOTED([OS_URL],"http://www.readynas.com/")
		AC_DEFINE_UNQUOTED([ROOTDEV_MANUFACTURERURL],"http://www.netgear.com/")
		AC_DEFINE_UNQUOTED([ROOTDEV_MANUFACTURER],"NETGEAR")
		AC_DEFINE_UNQUOTED([ROOTDEV_MODELNAME],"Windows Media Connect compatible (ReadyDLNA)")
		AC_DEFINE_UNQUOTED([ROOTDEV_MODELDESCRIPTION],"ReadyDLNA")
		AM_CONDITIONAL(TIVO_SUPPORT, true)
		AC_MSG_RESULT([yes])
	else
		AC_MSG_RESULT([no])
	fi
	],[
		AC_MSG_RESULT([no])
	]
)

AC_MSG_CHECKING([whether to build a static binary executable])
AC_ARG_ENABLE(static,
	[  --enable-static         build a static binary executable],[
	if test "$enableval" = "yes"; then
		CFLAGS="$CFLAGS -DSTATIC"
		LDFLAGS="$LDFLAGS -static"
                AC_MSG_RESULT([yes])
        else
                AC_MSG_RESULT([no])
        fi
        ],[
                AC_MSG_RESULT([no])
        ]
)

AC_MSG_CHECKING([whether to enable LTO])
AC_ARG_ENABLE(lto,
	[  --enable-lto            enable link-time optimization],[
	if test "$enableval" = "yes"; then
		CFLAGS="$CFLAGS -flto"
                AC_MSG_RESULT([yes])
        else
                AC_MSG_RESULT([no])
        fi
        ],[
                AC_MSG_RESULT([no])
        ]
)


case "$target_os" in
	darwin*)
		;;
        freebsd*)
                VER=`grep '#define __FreeBSD_version' /usr/include/sys/param.h | awk '{print $3}'`
                OS_URL=http://www.freebsd.org/
                ;;
	solaris*)
		AC_DEFINE([USE_IPF], [1], [Define to enable IPF])
		AC_DEFINE([LOG_PERROR], [0], [Define to enable logging])
		AC_DEFINE([SOLARIS_KSTATS], [1], [Define to enable Solaris Kernel Stats])
		;;
	kfreebsd*)
                OS_URL=http://www.debian.org/
		;;
        linux*)
		;;
        openbsd*)
                OS_URL=http://www.openbsd.org/
                ;;
        *)
                echo "Unknown OS : $target_os"
                ;;
esac


AC_OUTPUT([ po/Makefile.in
Makefile
])
